home *** CD-ROM | disk | FTP | other *** search
- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- DXClass, DXDraws, DXSprite, DXInput;
-
- type
- TForm1 = class(TDXForm)
- DXDraw1: TDXDraw;
- DXImageList1: TDXImageList;
- DXTimer1: TDXTimer;
- DXSpriteEngine1: TDXSpriteEngine;
- DXInput1: TDXInput;
- procedure FormKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
- procedure FormCreate(Sender: TObject);
- private
- { DΘclarations privΘes }
- public
- { DΘclarations publiques }
- end;
-
- var
- Form1: TForm1;
-
- implementation
- {$R *.DFM}
-
- // ***************************
- // La structure pour les mΘchants
- // ***************************
- type
- TMechantSprite = class( TImageSprite)
- private
- // Le sens de dΘplacement (droite ou gauche ?)
- FSens : Integer;
- protected
- // Pour les dΘplacements
- procedure DoMove( MoveCount : Integer);override;
- public
- // Pour la crΘation
- constructor Create( AParent : TSprite);override;
- end;
-
- // Le tableau des mΘchants
- var Mechants : Array[1..50] of TMechantSprite;
- var nNbEnnemis : Integer;
- // ***************************
- // La structure pour le joueur
- // ***************************
- type
- TPlayerSprite = class( TImageSprite)
- private
- // Le nombre de tirs
- FNumberShoot : Integer;
- // Les dΘlais pour les tirs
- FCounter : Integer;
- FOldShootCounter : Integer;
- protected
- // La procΘdure appellΘe pour les dΘplacements du joueurs
- procedure DoMove( MoveCount : Integer);override;
- procedure DoCollision( Sprite : TSprite; var Done : Boolean); override;
- public
- // La procΘdure apellΘe pour crΘer le joueur
- constructor Create( AParent : TSprite);override;
- end;
-
- // La variable du joueur
- var Player : TPlayerSprite;
-
-
- // ***************************
- // La structure du tir du joueur
- // ***************************
- type
- TShootSprite = class( TImageSprite)
- private
- // Quel est le joueur qui tire ?
- FPlayer : TPlayerSprite;
- protected
- // Les dΘplacements et la gestion des collisions
- procedure DoMove( MoveCount : Integer) ; override;
- procedure DoCollision( Sprite : TSprite; var Done : Boolean); override;
- public
- // CrΘation et destruction des missiles
- constructor Create( AParent : TSprite); override;
- destructor Destroy;override;
- end;
-
-
-
-
-
-
- // Initalisation des ennemis
- constructor TMechantSprite.Create( AParent : TSprite);
- begin
- inherited Create( AParent);
- // Affecte le dessin correspondant
- Image := Form1.DXImageList1.Items.Find( 'vaisseau');
- // La profondeur de cet objet (pour les transparences)
- Z := 2;
- Width := Image.Width;
- Height := Image.Height;
- // Sens de dΘplacement
- FSens := 1;
- end;
- procedure TMechantSprite.DoMove( MoveCount : Integer);
- begin
- inherited DoMove( MoveCount);
- // DΘplacement
- X := X + Int((MoveCount * (300/1000))) * FSens;
- // Si l'un des bords est atteind, on change le sens de dΘplacement
- if (X > (Form1.DXDraw1.Width - Width)) Or ( X< 0) then
- begin
- FSens := - FSens;
- Y := Y + 5;
- end
- end;
-
-
-
- // ***************************
- // Les procΘdures et fonctions du joueur
- // ***************************
- constructor TPlayerSprite.Create( AParent : TSprite);
- begin
- inherited Create( AParent);
- Image := Form1.DXImageList1.Items.Find( 'joueur');
- Z := 2;
- Width := Image.Width;
- Height := Image.Height;
- FNumberShoot := 0;
- X := (Form1.DXDraw1.Width- Width) div 2;
- Y := Form1.DXDraw1.Height- Height;
- end;
- procedure TPlayerSprite.DoMove( MoveCount : Integer);
- begin
- inherited DoMove( MoveCount);
- // Teste l'Θtat des entrΘes (clavier et joystick) et bouge en consΘquence
- // Est-ce que le joueur va α droite ?
- if isRight in Form1.DXInput1.States then
- begin
- X := X + (300/1000) * MoveCount;
- end;
- // Est-ce que le joueur va α gauche ?
- if isLeft in Form1.DXInput1.States then
- begin
- X := X - (300/1000) * MoveCount;
- end;
- // Est-ce que le joueur monte ?
- if isUp in Form1.DXInput1.States then
- begin
- Y := Y - (300/1000) * MoveCount;
- end;
- // Le joueur descend
- if isDown in Form1.DXInput1.States then
- begin
- Y := Y + (300/1000) * MoveCount;
- end;
- // Le joueur appuie sur le bouton 1
- if isButton1 in Form1.DXInput1.States then
- begin
- // On a tirΘ moins de 3 missiles et l'espace entre deux missiles et suffisant
- if (FNumberShoot < 3) And ( (FCounter-FOldShootCounter) >=100)then
- begin
- Inc( FNumberShoot);
- TShootSprite.Create( Engine);
- FOldShootCounter := FCounter;
- end;
- end;
- // Mise α jour du compteur pour les tirs
- FCounter := FCounter + MoveCount;
-
- // Borne les dΘplacements du joueur
- if X < 0 then
- X := 0;
- if X > (Engine.Width-Width) then
- X := (Engine.Width-Width);
- if Y < 0 then
- Y := 0;
- if Y > (Engine.Height - Height) then
- Y := (Engine.Height -Height );
-
- // Teste les collisions
- Collision;
- end;
-
- procedure TPlayerSprite.DoCollision( Sprite : TSprite; var Done : Boolean);
- begin
- if Sprite is TMechantSprite then
- begin
- Dead;
- Form1.Close;
- end;
- Done := False;
- end;
-
-
-
-
-
- // **********************************************
- // Les procΘdures et fonctions des tirs du joueur
- // **********************************************
- constructor TShootSprite.Create( AParent : TSprite);
- begin
- inherited Create( AParent);
- // Affecte ce tir au joueur
- FPlayer := Player;
- Image := Form1.DXImageList1.Items.Find( 'laser');
- Z := 2;
- Width := Image.Width;
- Height := Image.Height;
- // Positionne le missile au centre du vaisseau
- X := FPlayer.X+FPlayer.Width div 2 -3;
- Y := FPlayer.Y+Height;
- end;
- destructor TShootSprite.Destroy;
- begin
- // On "tue" le missile => dΘcrΘmente le nombre de tir
- Dec( FPlayer.FNumberShoot);
- inherited Destroy;
- end;
- procedure TShootSprite.DoMove( MoveCount : Integer);
- begin
- inherited DoMove( MoveCount);
-
- Y := Y - (800/1000)*MoveCount;
- // Teste les collisions du missile
- Collision;
-
- // On sort de l'Θcran => "tue" le sprite
- if Y <= 0 then
- Dead;
- end;
- procedure TShootSprite.DoCollision( Sprite : TSprite; var Done : Boolean);
- begin
- // Si le missile touche un mechant => Il meurt et c'est bien fait !
- if Sprite is TMechantSprite then
- begin
- Dec (nNbEnnemis);
- // Tue le mΘchant
- Sprite.Dead;
- // "Tue" le missile
- Dead;
- end;
- Done := False;
- end;
-
-
-
-
- procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if Key = VK_ESCAPE then
- Close;
- if ( ssAlt in Shift) And( Key = VK_RETURN) then
- begin
- DXDraw1.Finalize;
- if doFullScreen in DXDraw1.Options then
- begin
- RestoreWindow;
- DXDraw1.Cursor := crDefault;
- BorderStyle := bsSizeable;
- DXDraw1.Options := DXDraw1.Options-[doFullScreen];
- end
- else
- begin
- StoreWindow;
- DXDraw1.Cursor := crNone;
- BorderStyle := bsNone;
- DXDraw1.Options := DXDraw1.Options+[doFullScreen];
- end;
- DXDraw1.Initialize;
- end;
- end;
-
- procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
- begin
- if Not DXDraw1.CanDraw then Exit;
-
- // Actualisation des entrΘes de l'utilisateur
- DXInput1.Update;
-
- // Fais bouger tout le petit monde ( 60 images par secondes)!
- DXSpriteEngine1.Move( 1000 div 60);
- DXSpriteEngine1.Dead;
- // Efface l'Θcran
- DXDraw1.Surface.Fill(0);
- // Affiche les sprites
- DXSpriteEngine1.Draw;
- // Rend visible l'Θcran
- DXDraw1.Flip;
- // Il n'y a plus d'ennemis
- if nNbEnnemis <= 0 then
- Close;
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- var i, j, k : Integer;
- begin
- // CrΘation des mΘchants
- k := 0;
- for j := 1 to 5 do
- begin
- for i := 1 to 10 do
- begin
- Mechants[k] := TMechantSprite.Create( DXSpriteEngine1.Engine);
- With Mechants[k] do
- begin
- X := i*Mechants[k].Width;
- Y := j*Mechants[k].Height;
- end;
- k := k + 1;
- end;
- end;
- // Initialisation du nombre maxi d'ennemis
- nNbEnnemis := 50;
- // CrΘation du joueur
- Player := TPlayerSprite.Create( DXSpriteEngine1.Engine);
- end;
- end.
-